package com.soilflow.common.mybatisplus;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.fastjson2.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;

import java.io.Serializable;
import java.math.BigInteger;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * Entity基类
 * 
 * @author soilflow
 */
@Data
public class BaseEntity <T extends Model> extends Model implements Serializable {
    private static final long serialVersionUID = 1L;

    @JsonSerialize(using = ToStringSerializer.class)
    @JSONField(deserializeUsing = ToStringSerializer.class)
    @TableId(type = IdType.ASSIGN_ID)
    private  Long  id;
    /** 创建者 */

    @TableLogic
    @TableField(fill = FieldFill.INSERT) // 插入时自动填充
    private Integer deleted;

    /** 创建者 */
    @TableField(fill = FieldFill.INSERT) // 插入时自动填充
    private String createBy;

    /** 创建者 */
    @TableField(fill = FieldFill.INSERT) // 插入时自动填充
    private Long createId;



    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField(fill = FieldFill.INSERT) // 插入时自动填充
    private Date createTime;

    /** 更新者 */
    @TableField(fill = FieldFill.UPDATE) // 插入时自动填充
    private String updateBy;

    /** 创建者 */
    @TableField(fill = FieldFill.UPDATE) // 插入时自动填充
    private Long updateId;


    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.UPDATE) // 插入时自动填充
    private Date updateTime;

    /** 请求参数 */
    @ExcelIgnore
    @TableField(exist = false)
    private Map<String, Object> params;

    public Map<String, Object> getParams()
    {
        if (params == null)
        {
            params = new HashMap<>();
        }
        return params;
    }

    public void setParams(Map<String, Object> params)
    {
        this.params = params;
    }



//    public String getCreateBy()
//    {
//        return createBy;
//    }
//
//    public void setCreateBy(String createBy)
//    {
//        this.createBy = createBy;
//    }
//
//    public Date getCreateTime()
//    {
//        return createTime;
//    }
//
//    public void setCreateTime(Date createTime)
//    {
//        this.createTime = createTime;
//    }
//
//    public String getUpdateBy()
//    {
//        return updateBy;
//    }
//
//    public void setUpdateBy(String updateBy)
//    {
//        this.updateBy = updateBy;
//    }
//
//    public Date getUpdateTime()
//    {
//        return updateTime;
//    }
//
//    public void setUpdateTime(Date updateTime)
//    {
//        this.updateTime = updateTime;
//    }
//
//    public String getRemark()
//    {
//        return remark;
//    }
//
//    public void setRemark(String remark)
//    {
//        this.remark = remark;
//    }



}
